/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package in.co.sneh.controller.FileUploadServlet;

/**
 *
 * @author Balrog
 */


import com.csvreader.CsvReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.text.SimpleDateFormat;
import java.text.ParseException;
import java.util.Date;

public class Leercsvexpeinsert {
    int aux =0;
    StringBuilder fallas= new StringBuilder();

    public static void imp(String x) {
        System.out.println(x);
        
    }

    public Leercsvexpeinsert(String ruta) throws IOException {
     try {
            conexion con = new conexion();
            CsvReader expedientes = new CsvReader(ruta);
            expedientes.readHeaders();
            ReglasVerificacion reglas=new ReglasVerificacion();
            String Fecha_Vuelo;
            String compania;
            String Vuelo;
            String Aeropuerto;
            String Hora_entrada_corral;
            String Hora_salida_corral;
            String Tiempo_Total_TEF;
            String Corral;
            String Negocio;
            String Fecha_Vuelo_Nueva=null;
            int contador_null = 0;
            int contador_fallas=0;
            int contador_fila=0;
            
            StringBuilder nulas= new StringBuilder();
            
            


        
            while (expedientes.readRecord()) {
                
                String todo[] = expedientes.getRawRecord().split(",");
              //  Fecha_Vuelo = expedientes.get("Fecha Vuelo");
                Fecha_Vuelo=todo[0];
               // System.out.println(Fecha_Vuelo);
                if (Fecha_Vuelo.length() == 0) {
                    Fecha_Vuelo = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Fecha Vuelo en fila numero "+contador_fila+ "\n");
                }else
                if (!reglas.Fecha_Vuelo(Fecha_Vuelo)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Fecha Vuelo en fila numero "+contador_fila+ "\n");
                }
                
                //compania = expedientes.get("compania");
                compania=todo[1];
                if (compania.length() == 0) {
                    compania = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en compania en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.compania(compania)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en compania en fila numero "+contador_fila+ "\n");
                }
                //Vuelo = expedientes.get("Vuelo");
                Vuelo=todo[2];
                if (Vuelo.length() == 0) {
                    Vuelo = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Vuelo en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.Vuelo(Vuelo)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Vuelo en fila numero "+contador_fila+ "\n");
                 }
                
                   //Aeropuerto = expedientes.get("Aeropuerto");
                Aeropuerto=todo[3];
                if (Aeropuerto.length() == 0) {
                    Aeropuerto = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Aeropuerto en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.Aeropuerto(Aeropuerto)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Vuelo en fila numero "+contador_fila+ "\n");
                
                
                }
               
                //Hora_entrada_corral = expedientes.get("Hora entrada a Corral");
                Hora_entrada_corral=todo[4]; 
                if (Hora_entrada_corral.length() == 0) {
                    Hora_entrada_corral = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Hora entrada corral en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.Hora_entrada(Hora_entrada_corral)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Hora entrada corral en fila numero "+contador_fila+ "\n");
                }
                
                //Hora_salida_corral = expedientes.get("Hora salida corral");
                Hora_salida_corral=todo[5];
                if (Hora_salida_corral.length() == 0 || Hora_salida_corral=="") {
                    Hora_salida_corral = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Hora_salida_corral en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.Hora_salida(Hora_salida_corral)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Hora salida corral en fila numero "+contador_fila+ "\n");
                }
                
               // Tiempo_Total_TEF = expedientes.get("Tiempo Total TEF");
                Tiempo_Total_TEF=todo[6];
                if (Tiempo_Total_TEF.length() == 0) {
                    Tiempo_Total_TEF = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en tiempo total TEF en fila numero "+contador_fila+ "\n");
                }else
                    if (!reglas.Tiempo_tef(Tiempo_Total_TEF)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en tiempo total tef numero "+contador_fila+ "\n");
                }
                    
               //  Corral = expedientes.get("Corral");
                Corral=todo[7];
                if (Corral.length() == 0) {
                    Corral = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Corral en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.corral(Corral)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en corral en fila numero "+contador_fila+ "\n");
                }
                
                //Negocio = expedientes.get("Negocio");
                Negocio=todo[8];
                if (Negocio.length() == 0) {
                    Negocio = "NULL";
                    contador_null++;
                    fallas.append("nula numero "+contador_null+" en Negocio en fila numero "+contador_fila+ "\n");
                }else
                 if (!reglas.Negocio(Negocio)){
                contador_fallas++;
                fallas.append("Falla numero "+contador_fallas+" en Negocio en fila numero "+contador_fila+ "\n");
                }
                   if (Fecha_Vuelo.length() > 0) {
                    Fecha_Vuelo_Nueva = this.dateFormatter(Fecha_Vuelo);
                    /**
                     * cambiar_fecha(Fecha_Cierre);*
                     */
                }
  
                contador_fila++;
                  con.insertarexp(Fecha_Vuelo_Nueva,compania,Vuelo,Aeropuerto,Hora_entrada_corral,Hora_salida_corral,Tiempo_Total_TEF,Corral,Negocio, contador_fila);
                

            }

            
            expedientes.close();
            try {
                con.conexion.close();
            } catch (SQLException ex) {
                Logger.getLogger(Leercsvexpe.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (FileNotFoundException ex) {
            Logger.getLogger(Leercsvexpe.class.getName()).log(Level.SEVERE, null, ex);
        }
            
            
        }

public StringBuilder fallas(){
    return fallas;
}

   private String cambiar_fecha(String fecha) {


        String estado = null;
        String fechanueva = null;
        try {
            if (fecha.length() > 0) {
                String dia1 = fecha.substring(0, 2);
                String mes1 = fecha.substring(3, 6);
                String anio1 = fecha.substring(7, 11);

                switch (mes1) {
                    case "Jan":
                        mes1 = "01";
                        break;
                    case "Feb":
                        mes1 = "02";
                        break;
                    case "Mar":
                        mes1 = "03";
                        break;
                    case "Apr":
                        mes1 = "04";
                        break;
                    case "May":
                        mes1 = "05";
                        break;
                    case "Jun":
                        mes1 = "06";
                        break;
                    case "Jul":
                        mes1 = "07";
                        break;
                    case "Aug":
                        mes1 = "08";
                        break;
                    case "Sep":
                        mes1 = "09";
                        break;
                    case "Oct":
                        mes1 = "10";
                        break;
                    case "Nov":
                        mes1 = "11";
                        break;
                    case "Dec":
                        mes1 = "12";
                        break;
                    case "Ene":
                        mes1 = "01";
                        break;
                    case "Abr":
                        mes1 = "04";
                        break;
                    case "Ago":
                        mes1 = "08";
                        break;
                    case "Dic":
                        mes1 = "12";
                        break;
                }

                fechanueva = anio1 + "-" + mes1 + "-" + dia1;

                if ("null-null-null".equals(fechanueva)) {
                    fechanueva = null;
                }
            }

        } catch (StringIndexOutOfBoundsException ex) {
            estado = ex.getMessage();
        }


        return fechanueva;
    }
  public String dateFormatter(String formatToParse) {

        String format = "";

        SimpleDateFormat format1 = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss");
        SimpleDateFormat format2 = new SimpleDateFormat("dd-MM-yyyy hh:mm:ss");
        SimpleDateFormat format3 = new SimpleDateFormat("dd-MMM-yy");

        SimpleDateFormat finalFormat = new SimpleDateFormat("yyyy-MM-dd");

        Date parser;

        try {
            parser = format1.parse(formatToParse);
            format = finalFormat.format(parser);
        } catch (ParseException e1) {

            try {
                parser = format2.parse(formatToParse);
                format = finalFormat.format(parser);
            } catch (ParseException e2) {

                try {
                    parser = format3.parse(formatToParse);
                    format = finalFormat.format(parser);
                } catch (ParseException e3) {
                    System.err.println("Error: La fecha entregada no es valida para procesarse.");
                    e2.printStackTrace();
                }

            }
        }

        return format;
    }
    


}

  

